进制转换是十分常见的,今天我就分享一些 X进制 转 X进制
而且,其实有些就是对照着反过来
先把这些吃透吧:
 * D :Decimal (十进制)
 * B :Binary (二进制)
 * O :Octal (八进制)
 * H :Hexadecimal (十六进制)
 * 二进制 以 0b 开头的数字,如:int x = 0b1101111;
   二进制 里只有 [0 , 1]
 * 八进制 以 0 开头的数字,如:int x = 0157;
   八进制 里有 [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7]
 * 十进制 就是正常的数字,如:int x = 111;
   十进制 里有 [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]
 * 十六进制 以 0x 开头的数字,如:int x = 0x6F;
   十六进制 里有 [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , A(a)代替10 , B(b)代替11 , C(c)代替12 , D(d)代替13 , E(e)代替14 , F(f)代替15]
 * 哦,对了。这里还是提一下这老掉牙的知识点:n0n^0n0 = 1(n可以是任何非零的数(包括整数,小数,正数,负数)) 不知道为什么的点点我
   
二进制转十进制(整数):
 * 首先我们得知道二进制转十进制(B->D)其实就是二进制从右往左,各个位上依次乘以 2x2^x2x即可(x从0开始(当前这位是0也要乘))
 * 如:
   10011B = ( )D
   1 × 242^424 + 0 × 232^323 + 0 × 222^222+ 1 × 212^121 + 1 × 202^020 = 16 + 0 + 0 + 2 + 1 = 19
   所以 10011B = 19D
因此,我们可以得到以下代码:
> 十分简洁!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
十进制转二进制(整数):
 * 十进制转二进制(D->B),大家应该并不感到陌生,其实就是不断除以2取余(直到商为0),余数从下往上倒序输出就行啦。
 * 如:
   35D = ( )B
   35 ÷ 2 = 17 …… 1
   17 ÷ 2 = 8 …… 1
   8 ÷ 2 = 4 …… 0
   4 ÷ 2 = 2 …… 0
   2 ÷ 2 = 1 …… 0
   1 ÷ 2 = 0 …… 1
   倒序输出为100011
   所以 35D = 100011B
因此,我们可以得到以下代码:
> 简洁明了!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二进制转十六进制(整数):
 * 稍难一丢丢的转化,会了这个,二进制转八进制(B->O)你也就会了,二进制转十六进制(B->H)就是从最右边起,每四个二进制位为一个十六进制位(就是把这四个二进制位转成十进制(如果 这个十进制数≥10这个十进制数 \geq 10这个十进制数≥10 那么替换成字母)),不足四位添加前导0。记得倒序输出哦!
 * 举个例子:
   10110B = ( )H
   10110 拆成 一个四位和一个一位(1\color{red}11 和 0110\color{blue}01100110)
   因为是从右往左,所以先看 0110B
   0110B = 6D 加入ve动态数组(代码中有)
   然后再看1B
   1不足四位,补前导零3个000\color{silver}0000001\color{blak}11
   0001B = 1D 加入ve动态数组(代码中有)
   然后倒序输出 为16H
   所以 10110B = 16H
 * 再举个特殊的例子:
   101110B = ( )H
   101110 拆成 一个四位和一个两位(10\color{red}1010 和 1110\color{blue}11101110)
   因为是从右往左,所以先看 1110B
   1110B = 14D
   显然14≥1014 \geq 1014≥10了,所以要转成字母,14的字母为E,所以将E加入ve动态数组(代码中有)
   然后再看10B
   1不足四位,补前导零2个00\color{silver}000010\color{blak}1010
   0010B = 2D 加入ve动态数组(代码中有)
   然后倒序输出 为2EH
   所以 101110B = 2EH
因此,我们可以得到以下代码:
> 有点难,慢慢理解哦!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二进制转八进制(整数):
 * 既然你已经会了二进制转十六进制(B->H),约等于你会了二进制转八进制(B->O),因为二进制转八进制就是从最右边起,每三个二进制位为一个八进制位(就是把这三个二进制位转成十进制),不足三位添加前导0。还是要倒序输出哦!
 * 举个例子:
   1010B = ( )O
   1010 拆成 一个三位和一个一位(1\color{red}11 和 010\color{blue}010010)
   因为是从右往左,所以先看 010B
   010B = 2D 加入ve动态数组(代码中有)
   然后再看1B
   1不足三位,补前导零2个00\color{silver}00001\color{blak}11
   001B = 1D 加入ve动态数组(代码中有)
   然后倒序输出 为12O
   所以 1010B = 12O
   是不是和二进制转十六进制一样啊!
因此,我们可以得到以下代码:
> 如果你会二进制转十六进制,那你一定会二进制转八进制
> (不会二进制转八进制的说明你得去看医生了哦!)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
八进制转二进制(整数):
 * 说白了,就是倒推嘛,既然二进制转八进制是三位二进制数位为一位八进制数位,那反过来,就是以一位八进制数位转成三位二进制数位。
 * 给个例子就好理解很多了(对照上面):
   1010B = ( )O
   12O = ( )B
   12拆开,为1和2
   2的二进制为010
   1的二进制为001
   合起来(从右往左)为001010,去前导零为1010。
   所以 12O = 1010B
   是不是就是二进制转八进制反过来啊!
因此,我们可以得到以下代码:
> 对照着理解哈!不确定对不对,谨慎使用哦!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
十六进制转二进制(整数):
 * 说白了,就是和八进制转二进制和二进制转十六进制差不多,就是倒推嘛,既然二进制转十六进制是四位二进制数位为一位十六进制数位,那反过来,就是以一位十六进制数位转成四位二进制数位。
 * 给个例子就好理解很多了(对照上面):
   16H = ( )B
   16拆开,为1和6
   6的二进制为0110
   1的二进制为0001
   合起来(从右往左)为00010110,去前导零为10110。
   所以 16H = 10110B
   是不是就是二进制转十六进制反过来啊!
因此,我们可以得到以下代码:
> 也是对照着理解哈!不确定对不对,谨慎使用哦!
> 建议4个(二进制转八进制,八进制转二进制,二进制转十六进制,十六进制转二进制)一起理解
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
十进制转N进制(整数):
 * 十进制转N进制(D->N),其实和十进制转二进制(D->B)可以说一模一样,就是不断除以N取余(直到商为0),余数从下往上倒序输出就行啦。
 * 如:
   35D = ( )(三进制)
   也就是要我们将十进制转三进制,那么N=3(三(三进制))
   35 ÷ 3 = 11 …… 2
   11 ÷ 3 = 3 …… 2
   3 ÷ 3 = 1 …… 0
   1 ÷ 3 = 0 …… 1;
   倒序输出为1022
   所以 35D = 1022(三进制)
因此,我们可以得到以下代码:
> 很简单吧!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
N进制转十进制(整数):
 * 首先我们得知道N进制转十进制(N->D),其实和二进制转十进制(B->D)可以说一模一样,就是N进制从右往左,各个位上依次乘以 NxN^xNx即可(x从0开始(当前这位是0也要乘))
 * 如:
   1022(三进制(上面的例子,可以用来验证)) = ( )D
   也就是要我们将三进制转十进制,那么N=3(三(三进制))
   1 × 333^333 + 0 × 323^232+ 2 × 313^131 + 2 × 303^030 = 27 + 0 + 6 + 2 = 35D
   所以 1022(三进制) = 35D
因此,我们可以得到以下代码:
> 也十分简单
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 拉个番外:
十进制小数转二进制小数
 * 采用"乘2取整,顺序排列"法:
   小数部分(D)乘2,取整数部分(一定是0或1)加入二进制数组中,将小数部分(D)取出,再乘2……重复以上步骤,直到积中小数部分为0(没有小数部分)或者达到所要求的精度为止。
 * 如:
   10.25(D) = ( )B
   整数部分正常算:10(D) = 1010(B)
   小数部分:
   0.125 × 2 = 0.25 -> 0
   0.25 × 2 = 0.5 -> 0
   0.5 × 2 = 1.0 -> 1
   顺序排列为 001(B)
   合起来,点上小数点为:1010.001
   所以 10.125(D) = 1010.001(B)
因此,我们能得到以下代码:
> 不确定对不对,谨慎使用哦!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 其实合理利用 ZS_n_D( ) 和 ZS_D_n( )就可以做到N进制转M进制了。
> 不过大部分的函数都得是整数入参,没法处理小数哦。(只有一个可以处理)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
完整版代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对你有帮助吗?能给我一个小赞嘛?
祝你们每题AC
最后,打三个广告
 * 广告1
 * 广告2
 * 广告3